package com.bckj.fastboot.core.mybatisplus.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.bckj.fastboot.core.sql.SqlQueryBuilder;
import com.bckj.fastboot.core.sql.StatementBuilder;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface FastMapper<T> extends BaseMapper<T> {

    // select

    <R> List<R> selectBySql(@Param("sw") StatementBuilder sw, @Param("clazz") Class<R> clazz);

    <R> List<R> queryBySql(@Param("sw") SqlQueryBuilder sw, @Param("clazz") Class<R> clazz);


    // page

    <R> IPage<R> selectPageBySql(@Param("page") IPage<?> page, @Param("sw") StatementBuilder sw, @Param("clazz") Class<R> clazz);

    <R> IPage<R> queryPageBySql(@Param("page") IPage<?> page, @Param("sw") SqlQueryBuilder sw, @Param("clazz") Class<R> clazz);


    // count

    Long selectCountBySql(@Param("sw") StatementBuilder sw);

    Long queryCountBySql(@Param("sw") SqlQueryBuilder sw);
}
